#include<iostream>
#include<vector>
using namespace std;

vector<int> f;

int findfa(int x) {
    return f[x] = f[x] == x ? x : findfa(f[x]);
}

// 合并两个集合
void merge(int x, int y) {
    int fx = findfa(x);
    int fy = findfa(y);
    if(fx != fy) {
        f[fx] = fy;
    }
}

int main() {
    int a, b, p;
    cin >> a >> b >> p;
    f.resize(b + 1);
    for(int i=a; i<=b; i++) f[i] = i;

    // 枚举质因子
    for(int i = p; i <= b; i++) {
        bool is_prime = true;
        for(int j = 2; j * j <= i; j++) {
            if(i % j == 0) {
                is_prime = false;
                break;
            }
        }
        if(is_prime) {
            int first = (a + i - 1) / i * i; // 找到区间 [a, b] 内第一个 i 的倍数
            for(int j = first + i; j <= b; j += i) {
                merge(first, j);
            }
        }
    }

    // 统计集合数量
    int ans = 0;
    for(int i = a; i <= b; i++) {
        if(findfa(i) == i) {
            ans++;
        }
    }

    cout << ans << endl;

    return 0;
}